package cn.edu.lingnan.utils;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

import java.io.IOException;

/**
 * DeepSeek 对话工具类，封装了与 DeepSeek API 的交互逻辑。
 */

/**
 * 2025-3-16 这个类需要重构，使用最新的SpringAI框架 @Yexiu
 */
public class DeepSeekChatUtil {


    private final DeepSeekClient client;

    //消息列表
    private JSONArray messages;

    private JSONArray historyMessages;

    private JSONArray newHistoryMessages;

//    private static final String API_KEY = "sk-a449871580604953897b9107a164064e";

    public DeepSeekChatUtil(JSONArray historyMessages) {
        this.client = new DeepSeekClient( );
        this.messages = new JSONArray();
        this.historyMessages = historyMessages;
        this.newHistoryMessages = new JSONArray();
        initializeMessages();
    }


    /**
     * 初始化消息列表。
     */
    private void initializeMessages() {
        if (!this.historyMessages.isEmpty()) {
            for(Object message:historyMessages){
                this.messages.add(message);
            }
        }
    }

    /**
     * 添加用户消息到消息列表。
     *
     * @param userInput 用户输入的内容
     */
    public void addUserMessage(String userInput) {
        JSONObject userMessage = new JSONObject();
        userMessage.put("role", "user");
        userMessage.put("content", userInput);
        this.messages.add(userMessage);
        this.newHistoryMessages.add(userMessage);
    }

    /**
     * 发送请求并流式输出助手回复。
     *
     * @param callback 流式回调接口
     * @throws IOException 如果请求失败
     */
    public void sendRequest(StreamingCallback callback) throws IOException {
        this.client.sendRequest(this.messages, new DeepSeekClient.StreamingCallback() {
            @Override
            public void onData(String data) {
                callback.onData(data);
            }

            @Override
            public void onComplete(String data) {

                addAssistantResponse(data);
                callback.onComplete();
            }
        });
    }

    /**
     * 将助手回复添加到消息列表。
     */
    private void addAssistantResponse(String assistantResponse) {
        JSONObject assistantMessage = new JSONObject();
        assistantMessage.put("role", "assistant");
        assistantMessage.put("content", assistantResponse);
        this.messages.add(assistantMessage);
        this.newHistoryMessages.add(assistantMessage);
    }




    //get messages
    public JSONArray getMessages(){
        return this.messages;
    }


    public JSONArray getNewHistoryMessages(){
        return this.newHistoryMessages;
    }


    /**
     * 流式回调接口。
     */
    public interface StreamingCallback {
        void onData(String data);

        void onComplete();
    }
}
